-- 公共配置，避免重复
local common_diagnostic_config = {
  signs = true, -- 在行号旁显示诊断标记（如错误、警告图标）
  update_in_insert = false, -- 在插入模式下不更新诊断信息，避免干扰输入
  underline = true, -- 为有诊断信息的文本添加下划线
  show_header = false, -- 不显示诊断弹窗的标题
  severity_sort = true, -- 诊断信息按重要性排序
  float = {
    source = "always", -- 在诊断弹窗中总是显示错误来源
    border = "rounded", -- 为诊断弹窗设置圆角边框
    style = "minimal", -- 设置弹窗样式为最小化
    header = "", -- 设置弹窗的标题为空
    -- 其他未使用的配置项可以注释掉或删除
  },
}

-- 获取操作系统名称
local sysname = vim.loop.os_uname().sysname

-- 判断当前操作系统是否为 macOS（Darwin）
if sysname == "Darwin" then
  -- macOS 下使用的配置
  vim.diagnostic.config(vim.tbl_deep_extend("force", common_diagnostic_config, {
    virtual_text = true, -- 在代码右侧显示虚拟文本诊断信息
  }))
else
  -- Linux 下禁用虚拟文本诊断信息，其余配置与 macOS 相同
  vim.diagnostic.config(vim.tbl_deep_extend("force", common_diagnostic_config, {
    virtual_text = false,
  }))
  -- Linux 下禁用 LSP 进度消息
  vim.lsp.handlers["$/progress"] = function() end
end

-- 定义用于 LSP 诊断标记的图标
local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
for type, icon in pairs(signs) do
  local hl = "DiagnosticSign" .. type
  vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end
